package com.secKillingProject.error;

/**任何导致程序跑不下去的异常都转到这类来，
 * 最后它会别springBoot的Controller层所捕获
 * 包装模式，即装饰者模式
 * 这属于设计模式中的包装模式
 * 包装器业务异常类实现
 *
 * 常量类是CommonError的实现类
 * 这个装饰器类包装了常量类，所有异常都经过这个装饰器类处理，再交给常量类。
 * 同时这个装饰器类在常量类的基础上允许自定义扩展常量异常
 * @author mo_chou_555*/
public class BusinessException extends Exception implements CommonError{

    /**内部强关联一个CommonError,
     * 并且有相应的构造函数直接接受EmBusinessError的传参用于构造业务异常*/
    private final CommonError commonError;
    public BusinessException(CommonError commonError){
        super();
        this.commonError =commonError;
    }
    /**接受自定义errMsg的方构造业务异常*/

// if (inRedispromoToken == null){
// throw new BusinessException
//  (EmBusinessError.PARAMETER_VALIDATION_ERROR,"令牌校验失败");

    /**上面是异常传入，将异常传给commonError,异常信息传给errMsg
     * 生成EmBusinessError类型的commonError异常对象*/
    public BusinessException(CommonError commonError,String errMsg){
        super();
        this.commonError = commonError;
        this.commonError.setErrMsg(errMsg);
    }

    @Override
    public int getErrCode() {
        return this.commonError.getErrCode();
    }

    @Override
    public String getErrMsg() {
        return this.commonError.getErrMsg();
    }

    @Override
    public CommonError setErrMsg(String errMsg) {
        this.commonError.setErrMsg(errMsg);
        return this;
    }
}
